home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 42
/
Amiga Format AFCD42 (Issue 126, Aug 1999).iso
/
-serious-
/
comms
/
other
/
micq-0.4.0
/
icq091.txt
< prev
next >
Wrap
Text File
|
1999-05-14
|
38KB
|
786 lines
NOTE !!!! : Magnus Ihse is NOT the author of MICQ!!!!!!!!!!!!!!!!!
do NOT send him questions about Micq send them the meadhros@yahoo.com thank
you.
########################
## THE ICQ PROTOCOL ##
########################
Version 0.91
Last update 12 April 1998
(Minor update 11 May 1998)
Created by Magnus Ihse (d95-mih@nada.kth.se)
Copyright © 1998
The home page of this specification is
http://www.student.nada.kth.se/~d95-mih/icq/
To participate in the mailing list icq-devel, send a mail to
majordomo@tjsgroup.com, with the message body consisting only of the
line "subscribe icq-devel".
About this document
-------------------
Please note: I am in no way affiliated with Mirabilis. This is an unofficial
specification, based solely on TCP/UDP packet traces and my own guesswork.
This means that the information in here might be (and probably _will_ be
:-)) incorrect. It also means that even _if_ some parts of this specification
_is_ correct, they may change at any moment due to the Divine Will of
Mirabilis.
I am a computer science student at the Royal Institute of Technology in
Sweden, and this is a hobby project - something I have been doing in my
free time (i.e., late in the nights :-)). This means that I don't have
much time to spend on updating this document.
Recently I have received a lot of requests for this document, and many
persons have offered to help me complete and correct it. I am very thankful
for such help, and all contributions will of cource receive proper credit.
Otherwere in this document is described in more detail what you can do to
help, and how you should do it.
Legal information
-----------------
Aa far as I can tell (but I am not a laywer), the way I have extracted
this information complies with Mirabilis License agreement, which states:
"You agree not to reverse engineer, decompile or disassemble the software."
I have not reverse engineered, decompiled or disassembled the software
(i.e. Mirabilis ICQ client) to get this information. I have only been
looking at the TCP and UDP packets send out from, and received by, my
computer.
If you are a Mirabilis employee, and you feel that this document still
violates the Licence agreement, or if you on other grounds think that
this document is dubious - please contact me as soon as possible!
(My e-mail address given at top of this document.)
Copyright
---------
This document is protected under internation copyright law. You may
not modify this document. You may, however, make an unlimited number
of copies of this document, as long as it is kept intact. You may
freely distribute this document electronically (on the Internet or
otherwise) or on paper.
Any trademarks mentioned in this text belongs to their respective owner.
Disclaimer
----------
LICENSE AGREEMENT
This document and the information present herein is provided by Magnus Ihse
("the Author") for your personal use only. You agree to the full
responsibility for the results of your use of this document or the information
present herein.
By using this document or the information present herein, you accept
the terms of this license agreement.
THIS INFORMATION IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR MAKES NO
WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THOSE OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, WITH RESPECT TO THIS
DOCUMENT AND THE INFORMATION PRESENT HEREIN. THE AUTHOR DOES NOT WARRANT,
GUARANTEE OR MAKE ANY REPRESENTATIONS REGARDING THE USE OR THE RESULTS OF
THE USE OF THIS DOCUMENT OR THE INFORMATION PRESENT HEREIN, IN TERMS OF THE
ACCURACY, RELIABILITY, QUALITY, VALIDITY, STABILITY, COMPLETENESS,
CURRENTNESS, OR OTHERWISE. THE ENTIRE RISK OF USING THE INFORMATION PRESENT
IN THIS DOCUMENT IS ASSUMED BY THE USER.
IN NO EVENT WILL THE AUTHOR BE LIABLE TO ANY PARTY (i) FOR ANY DIRECT,
INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
INTERRUPTION, LOSS OF PROGRAMS OR INFORMATION, AND THE LIKE), OR ANY OTHER
DAMAGES ARISING IN ANY WAY OUT OF THE AVAILABILITY, USE, RELIANCE ON, OR
INABILITY TO USE THIS DOCUMENT OR THE INFORMATION PRESENT HEREIN, EVEN IF
THE AUTHOR HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, AND
REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT, TORT, OR OTHERWISE;
OR (ii) FOR ANY CLAIM ATTRIBUTABLE TO ERRORS, OMISSIONS, OR OTHER
INACCURACIES IN, OR DESTRUCTIVE PROPERTIES OF ANY INFORMATION.
Writing an ICQ clone
--------------------
Since the public release of this document, at least two different ICQ clones
have been created. They are at the time of writing very much under
development, but are at least partly functioning. :-) More information can
be found on my web page, or through the icq-devel mailing list.
(For web page URL or subscription information, see top of this document.)
What needs to be done
---------------------
The worst deficiency of this document is the lack of information about
version 3 and version 4 of the protocol. These versions are used by ICQ98
(older beta versions of ICQ98 seems to have used only version 3, the latest
version as of today seems to use both version 3 and version 4). This document
only describes version 2 of the protocol, which was used by versions up to
but not including ICQ98 (I think v1.113 was the latest version of ICQ using
version 2 of the protocol). Note that the ICQ version numbers refer to the
Windows 95/NT version of ICQ. I think that the Mac and Java version still
uses version 2, but I haven't checked this (please correct me if I'm wrong!).
So, what's the difference between version 2 and 3/4? As far as I can tell,
the major difference is that all packets in version 3/4 has some sort of
unique code attached to it. I think it is part of an anti-spoof scheme, but
I am not sure. I have not been able to figure out how this code is generated,
and I definitely need help on this. There are also minor changes in the
packet format. The basic structure still seems intact, however.
That this document doesn't cover version 3 and 4 doesn't mean that it can't
be used for building an ICQ clone, however. Mirabilis servers still supports
version 2 clients (or at least they did when I last checked). There is
reason to suspect that this might change some day, since the version 1
clients have been phased out, and are not useable any more.
Furthermore are there some fields in the packets which I just couldn't figure
out. You will find these marked "Unknown", and some typical value in the
Content column.
Many packet types are missing from this description for sure. If Mirabilis
have used all multiples of 10 for their codes, there seem to be a lot of
them missing. :-)
There is much about the peer-to-peer communication that still is not
clear to me. (This protocol seems not to have changed in ICQ98, however.)
And finally, some of the features of ICQ have not even been addressed in this
document. This includes file transfer and chat, but also some of the new
features of ICQ98.
If you can help in filling any of these gaps, or correct the information
given here, please do not hesitate to contact me! I'd prefer if you
send an e-mail to d95-mih@nada.kth.se with subject "ICQ Update".
(Please note! Sending an empty mail with the subject "ICQ Update" does
NOT mean that I'll mail you a copy of the spec when it's updated! If
you are interested in keeping up to date with the ICQ specification, please
join the mailing list instead.)
Introduction
------------
Communication with persons online is done through a direct TCP connection
to that person. All other communication is done through UDP packets sent to
the ICQ server. All UDP packets must be acknowledged by the receiver.
Retransmission will occur in 10 seconds if a acknowledgement is not
received. After 6 unsuccessfull transmissions, a B_MESSAGE_ACK message will
be sent. The whole procedure is repeated 2 times. If there is still no
reply, the ICQ client will assume the user to be disconneced.
Before any communication between users can take place, the client must
register at the server by logging in. During the login process, the client
sen